/**
 * @file 订单标签配置
 * @author liuying
 * @date 2021-07-30 15:24:11
 */

layui.define(['element', 'layer', 'form', 'table', 'zmnOmsSelect', 'laytpl', '$http'], function (exports) {
    let $ = layui.$;
    let form = layui.form;
    let element = layui.element;
    let $http = layui.$http;
    let layer = layui.layer;
    let zmnOmsSelect = layui.zmnOmsSelect;
    var table = layui.table;

    let CONF_BASE_URL = OMS_BASE_URL + '/conf/ordertag';

    /**
     * 获取某个元素下子元素的文本值
     * @param item
     * @param ele
     * @returns {jQuery}
     */
    function getText(item, ele) {
        return $(item).find(ele).text() || $(item).find(ele).val();
    }
    /**
     * 判断是否是正整数
     * @param val {number/string} 字符串或数字
     * @returns {boolean} 返回是否是数字
     */
    function isNumber(val) {
        var reg = /^[0-9]\d*$/;//正整数
        return reg.test(val);
    }

    /**
     * 打开对话框
     * @param {Object} config 配置
     */
    function openDialog (config) {
        let defaultConfig = {
            type: 2,
            content: '/',
            title: '',
            shade: [0.8, '#393D49'],
            area: ['40%', '550px'],
            minWidth: '600px',
            zIndex: layer.zIndex, // 重点1
            success: function(layero) {
                parent.layer.setTop(layero); // 重点2
            },
            end: function(index, layero){
                // 刷新列表
                table.reload("conf-table", {}, true);
            }
        };
        parent.layer.open(Object.assign({}, defaultConfig, config));
    }

    function getSearchParams(field) {
        let params = {
            plat: $('.plat-tab').find('li.layui-this').data('plat')
        }

        if (field) {
            // 拷贝非空字段
            Object.keys(field).filter((key) => {
                params[key] = field[key];
            });
        }
        return params;
    }

    /**
     * 渲染表格
     * @param {object} params 查询参数
     * @returns {object}
     */
    function renderTable() {
        table.render({
            elem: '#conf-table',
            url: CONF_BASE_URL + '/ajax/list.action',
            where: getSearchParams(),
            toolbar: '#toolbar',
            defaultToolbar: ['filter', 'exports', 'print'],
            page: true,
            cols: [[
                // {type: 'checkbox', fixed: 'left'},
                {field: 'sort', title: '排序', width: 60, templet: "#sortInput"},
                {field: 'id', title: 'ID', width: 60, unresize: true, sort: true},
                {field: 'categNames', title: '分类名称', width: 120},
                {field: 'tagName', title: '标志类型', width: 120},
                {field: 'tagShortName', title: '简称', width: 120},
                {field: 'status', title: '状态', templet: '#switchStatusTpl', unresize: true, width: 120},
                {field: 'remark', title: '标志说明', unresize: true},
                {field: 'creater', title: '最近操作人/时间', width: 150, templet: function (res) {
                    if (res.updater) {
                        return res.updater + '/' + res.updateTime;
                    } else {
                        return res.creater + '/' + res.createTime;
                    }
                }},
                {fixed: 'right', title: '操作', toolbar: '#editTpl', width: 80},
            ]],
            request: {
                pageName: 'pageIndex', // 页码
                limitName: 'pageSize' // 条数限制
            },
            response: {
                statusCode: 200 // 重新规定成功的状态码为 200，table 组件默认为 0
            },
            parseData: function (res) { //将原始数据解析成 table 组件所规定的数据
                var count = res.data ? res.data.count : 0;
                $('.layui-this').find('.count').text('（共 ' + count + ' 条）');
                return {
                    "code": res.status,
                    "msg": res.message,
                    "count": res.data ? (res.data.count > 10000 ? 10000 : res.data.count) : 0, //解析数据长度
                    "data": res.data ? res.data.data : [] //解析数据列表
                };
            },
            done:initTableEvent
        });
    }

    function initTableEvent() {
        // 监听修改排序
        $('.sort').blur(function (event) {
            let sort = $(this).val();
            if (!isNumber(sort)) {
                layer.msg("请输入正整数");
                return;
            }

            let id = getText($(this).parents("tr"), 'td[data-field=id]');

            let url = CONF_BASE_URL + '/modifySort.action';
            $http.$get(url, {id: id, sort: sort}).then(function () {
                layer.msg('操作成功', { icon: 1, time: 1000 });
            }, (msg) => {
                layer.msg(msg);
            });
        });
    }

    function initEvent() {
        // 头工具栏事件
        table.on('toolbar(conf-table)', function(obj){
            switch(obj.event){
                case 'add':
                    let plat = $('.plat-tab').find('li.layui-this').data('plat');
                    openDialog({
                        title: '新增',
                        content: CONF_BASE_URL + '/addEdit.action'
                    })
                    break;
            };
        });

        // 监听行工具事件
        table.on('tool(conf-table)', function(obj){
           if(obj.event === 'edit'){
               openDialog({
                   title: '详情',
                   content: CONF_BASE_URL + '/addEdit.action?id=' + obj.data.id
               })
            }
        });

        // 双击编辑
        // table.on('rowDouble(conf-table)', function(obj){
        //     openDialog({
        //         title: '详情',
        //         content: CONF_BASE_URL + '/addEdit.action?id=' + obj.data.id
        //     })
        // });

        // 监听状态操作
        form.on('switch(status)', function(obj){
            let url = CONF_BASE_URL + '/modifyStatus.action';
            $http.$get(url, {id: this.value, status: obj.elem.checked ? 2 : 1}).then(function () {
                layer.msg('操作成功', { icon: 1, time: 1000 });
            }, (msg) => {
                obj.othis.parent().find(':checkbox').prop("checked", !obj.elem.checked);
                form.render('checkbox');
                layer.msg(msg);
            });
        });

        // 查询
        form.on('submit(submit-search)', function (obj) {
            table.reload("conf-table", {
                where: getSearchParams(obj.field),
                page: {
                    curr: 1 //重新从第 1 页开始
                }
            });
            return false;
        });
    }

    function init() {
        initEvent();
        renderTable();
        initTableEvent();

        // 状态
        zmnOmsSelect.selectStatus('status', {
            isRadio:true // 单选
        });
        // 标记分类
        zmnOmsSelect.selectConfOrderTagCategory('categoryId', {
            tips: "全部",   //默认提示
            isRadio:true, // 单选
            page: {
                enable: true,
                remote:true,
                pageSize: 20
            },
            remote: {
                events: {
                    extendParams: function () {
                        return {
                            status: 2
                        }
                    }
                }
            }
        });

    }

    init();
    exports('oms_conf_ordertag_list');
});
